package dominioAeropuerto;
import java.util.*;

import api.*;

public class ObjetoPista extends ObjetoDominio implements Mensajes {
	
	public ObjetoPista(Pista elementoDominio,boolean observaCancelables) {
		super(elementoDominio);
		this.crearSucesoYRespuestas();
	}
	
	private void crearSucesoYRespuestas(){
		Suceso sucPistaLibre = new Suceso(pistaLibre);
		Suceso sucPistaOcupada = new Suceso(pistaOcupada);
		
		Respuesta respPistaLibre = new Respuesta(pistaLibre,sucPistaLibre);
		this.agregarRespuesta(respPistaLibre);
		
		Respuesta respPistaOcupada = new Respuesta(pistaOcupada,sucPistaOcupada);
		this.agregarRespuesta(respPistaOcupada);
	}
	
	public void notificarMensaje(String mensaje) {		
		List<String> mensajesCancelables = crearMensajesCancelables(mensaje);
		List<Suceso> sucesosCancelables = crearSucesosCancelables(mensajesCancelables);		
		Suceso suceso = new Suceso(mensaje,sucesosCancelables);
		enviarSuceso(suceso);
	}
		
	public void interpretarRespuesta(Respuesta respuesta){		
		Pista elemento = (Pista)super.getElementoDominio();
		if ((respuesta.getDescripcion().compareTo(pistaOcupada) == 0) ||
			(respuesta.getDescripcion().matches(respAutorizadoAterrizaje+".*")) ||
			(respuesta.getDescripcion().matches(respAutorizadoDespegue+".*")))
			elemento.setOcupada(true);
		else if ((respuesta.getDescripcion().compareTo(pistaLibre) == 0) ||
				(respuesta.getDescripcion().matches(avionEnTierra+".*")) ||
				(respuesta.getDescripcion().matches(avionEnVuelo+".*"))) 
				elemento.setOcupada(false);
		else elemento.setEstadoClimatico(respuesta.getDescripcion());
	}
	
	private List<String> crearMensajesCancelables(String mensaje){
		List<String> mensajesCancelables = new ArrayList<String>();		
		if (mensaje.compareTo(pistaOcupada) == 0){
			mensajesCancelables.add(pistaLibre);			
		}
		else if (mensaje.compareTo(pistaLibre) == 0){
			mensajesCancelables.add(pistaOcupada);
		}		
		return mensajesCancelables;
	}
	
	private List<Suceso> crearSucesosCancelables(List<String> mensajes){
		List<Suceso> sucesosCancelables = new ArrayList<Suceso>();
		Iterator<String> itMensajes = mensajes.iterator();
		while (itMensajes.hasNext()){
			String mensaje = itMensajes.next();			
			Suceso sucesoCancelable = new Suceso(mensaje);
			sucesosCancelables.add(sucesoCancelable);
		}
		return sucesosCancelables;
	}
}
